package com.yangtao.prototype.system.menu.service.impl;

import com.yangtao.framework.service.BaseService;
import com.yangtao.prototype.system.dao.MenuTreeDao;
import com.yangtao.prototype.system.domain.MenuTree;
import com.yangtao.prototype.system.menu.service.MenuService;
import com.yangtao.prototype.system.menu.web.MenuModel;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 */
@Service
public class MenuServiceImpl extends BaseService implements MenuService {
	@Autowired
	private MenuTreeDao menuTreeDao;

	/**
	 * 修改时页签编号不能重复，重复需要反馈菜单页签不能重复信息,页签名称可以重复
	 *
	 * @param model
	 * @return model
	 */
	@Override
	public MenuModel updateMenu(MenuModel model) {
		//VO
		MenuTree menuVo = model.getMenu();
		//主键
		String menuId = menuVo.getId();
		//PO
		MenuTree menuPo = menuTreeDao.load(menuId);
		//修改属性
		mapper.map(menuVo, menuPo);
		model.addInfo("save.success");
		return model;
	}

	/**
	 * @param model
	 * @return model
	 */
	@Override
	public MenuModel loadMenuTree(MenuModel model) {
		model.setMenuTreeStore(menuTreeDao.findMenuStore());
		return model;
	}

	/**
	 * @param model
	 * @return model
	 * @remark 根据页签ID号加载页签单条数据信息
	 */
	@Override
	public MenuModel loadMenu(MenuModel model) {
		if (StringUtils.isNotEmpty(model.getMenu().getId())) {
			String id = model.getMenu().getId();
			model.setMenu(menuTreeDao.load(id));
		}
		return model;
	}

	/**
	 * @param model
	 * @return model
	 * @author 胡安令 Date:2011年3月2日
	 * @remark 删除判断是否有子结构树, 有子结构树，反馈有子结构树不能删除
	 */
	@Override
	public MenuModel deleteMenu(MenuModel model) {
		String id = model.getMenu().getId();
		MenuTree menuTree = menuTreeDao.load(id);
		if (menuTree.getSubMenus() != null && menuTree.getSubMenus().size() > 0) {
			if (model.getIngore() == 0) {
				model.addWarning("has.subMenu");
				return model;
			}
		}
		//删除菜单及其子菜单
		menuTreeDao.delete(menuTree);
		model.addInfo("delete.success");
		return model;
	}

	/**
	 * @param model
	 * @return
	 * @author 胡安令 Date:2011年3月2日
	 * @remark 加载所有结构树信息
	 */
	@Override
	public MenuModel findAll(MenuModel model) {
		return null;
	}

	/**
	 * 新增一个菜单
	 *
	 * @param model
	 * @return
	 */
	@Override
	public MenuModel addMenu(MenuModel model) {
		//VO
		MenuTree menuVo = model.getMenu();
		//PO
		MenuTree menuPo = new MenuTree();
		//检查唯一性
		if (menuTreeDao.load(menuVo.getId()) != null) {
			model.addError("菜单代码重复");
			return model;
		}

		//从VO copy值到PO
		mapper.map(menuVo, menuPo);
		//设置其他属性
		if (StringUtils.isNotEmpty(model.getPid())) {
			MenuTree parent = menuTreeDao.load(model.getPid());
			menuPo.setParentMenu(parent);
			menuPo.setLevel(parent.getLevel() + 1);
		} else {
			menuPo.setLevel(1);
		}
		menuTreeDao.save(menuPo);
		model.addInfo("add.success");
		return model;
	}
}
